/**
 * 下载相关工具函数
 */

/**
 * 验证是否为有效的URL
 * @param string - 要验证的字符串
 * @returns boolean - 是否为有效的HTTP/HTTPS URL
 */
export const isValidUrl = (string: string): boolean => {
  try {
    const url = new URL(string);
    return url.protocol === 'http:' || url.protocol === 'https:';
  } catch (_) {
    return false;
  }
};

/**
 * 下载文件
 * @param url - 文件下载链接
 * @param filename - 可选的文件名
 */
export const downloadFile = async (url: string, filename?: string): Promise<void> => {
  try {
    // 方法1：直接使用 a 标签下载（适用于同域名或支持 CORS 的文件）
    const link = document.createElement('a');
    link.href = url;
    link.download = filename || ''; 
    link.style.display = 'none'; // 隐藏链接避免视觉效果
    document.body.appendChild(link);
    link.click();
    document.body.removeChild(link);
  } catch (error) {
    console.warn('直接下载失败，尝试在新窗口打开:', error);
    // 备用方案：在新窗口打开（适用于跨域文件）
    window.open(url, '_blank');
  }
};

/**
 * 自动下载文件（根据返回结果自动判断是否为下载链接）
 * @param result - API返回结果
 * @param filename - 可选的文件名
 * @returns boolean - 是否触发了下载
 */
export const autoDownloadFromResult = async (result: any, filename?: string): Promise<boolean> => {
  // 如果结果是一个URL字符串
  if (result && typeof result === 'string' && isValidUrl(result)) {
    await downloadFile(result, filename);
    return true;
  }
  
  // 如果结果是包含URL的对象
  if (result && typeof result === 'object' && result.url && isValidUrl(result.url)) {
    await downloadFile(result.url, filename);
    return true;
  }
  
  return false;
}; 
